package com.um.springboot.starter.orm.manager;


import com.um.springboot.starter.orm.entity.BaseDTO;
import com.um.springboot.starter.orm.entity.BaseEntity;
import com.um.springboot.starter.orm.entity.BaseVO;
import com.um.springboot.starter.orm.entity.TreeNode;
import com.um.springboot.starter.orm.params.ListDTO;
import com.um.springboot.starter.orm.params.PageDTO;
import com.um.springboot.starter.orm.service.TreeService;
import lombok.extern.slf4j.Slf4j;

import java.lang.reflect.ParameterizedType;
import java.lang.reflect.Type;
import java.util.List;


/**
 * @author 邓南辉
 * 日期 2023/2/6
 * 版权所有 广州优匠科技有限公司
 */
@Slf4j
public class BaseTreePlusManager<S extends TreeService<N,E>,E extends BaseEntity,D extends BaseDTO,V extends BaseVO,P extends PageDTO,L extends ListDTO,N extends TreeNode>
        extends BasePlusManager<S,E,D,V,P,L> {


    protected Class<N> nodeClass = this.getNodeClass();

    protected Class<N> getNodeClass() {
        Type superclass = getClass().getGenericSuperclass();
        ParameterizedType type = (ParameterizedType) superclass;
        return (Class<N>) type.getActualTypeArguments()[4];
    }

    /**
     * 查询树结构
     * @param parentId
     * @return
     */
    public List<N>  getTree(String parentId){
        return service.getTree(parentId);
    }

    /**
     * 删除一个实体
     * @param id
     * @return
     */
    public boolean deleteNode(String id){
        return service.deleteNode(id);
    }

    /**
     * 根据id列表删除对象
     *
     * @param ids     值数组
     * @return 执行成功返回true
     */
    public boolean deleteNodes(List<String> ids){
        return service.deleteNodes(ids);
    }


    /**
     * 移动节点
     *
     * @param id     ID
     * @param parentId     父ID
     * @return 执行成功返回true
     */
    public boolean moveNode(String id,String parentId){
        return service.moveNode(id,parentId);
    }



}
